462D - Appleman and Tree - CodeForces Solution


dp graphs *2000

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5, MOD=1e9+7;
vector<int> sons[MAXN];
int col[MAXN], f[MAXN], g[MAXN], n;
int main()
{
	cin >> n;
	for (int i=1; i<n; i++)
	{
		int x;
		cin >> x;
		sons[x].push_back(i);
	}
	for (int i=0; i<n; i++) cin >> col[i];
	int sufs[MAXN], pres[MAXN];
	for (int i=n-1; i>=0; i--)
	{
		int m = sons[i].size();
		pres[0] = 1;
		for (int j=0; j<m; j++) pres[j+1] = (long long)pres[j] * f[sons[i][j]] % MOD;
		sufs[m] = 1;
		for (int j=m-1; j>=0; j--) sufs[j] = (long long)sufs[j+1] * f[sons[i][j]] % MOD;
		f[i] = pres[m];
		for (int j=0; j<m; j++) g[i] = (g[i] + (long long)pres[j] * g[sons[i][j]] % MOD * sufs[j+1]) % MOD;
		if (col[i]) g[i] = f[i], f[i] = 0;
		f[i] = (f[i] + g[i]) % MOD;
	}
	cout << g[0] << "\n";
}


Comments

Submit
0 Comments
More Questions

84. Largest Rectangle in Histogram
60. Permutation Sequence
42. Trapping Rain Water
32. Longest Valid Parentheses
Cutting a material
Bubble Sort
Number of triangles
AND path in a binary tree
Factorial equations
Removal of vertices
Happy segments
Cyclic shifts
Zoos
Build a graph
Almost correct bracket sequence
Count of integers
Differences of the permutations
Doctor's Secret
Back to School
I am Easy
Teddy and Tweety
Partitioning binary strings
Special sets
Smallest chosen word
Going to office
Color the boxes
Missing numbers
Maximum sum
13 Reasons Why
Friend's Relationship